// 引入MySQL的DataSource
import com.mysql.cj.jdbc.MysqlDataSource;

// 引入数据源和连接相关的类
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 引入java.util.Scanner类，用于从控制台读取输入内容
import java.util.Scanner;

public class JDBCInsertDemo {
    public static void main(String[] args) throws SQLException {
        // 1，创建数据源，描述MySQL数据库的位置
        // 创建一个MySQL的DataSource
        DataSource dataSource = new MysqlDataSource();
        // 指定MySQL的URL地址及相关的参数
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
        // 指定MySQL的用户名
        ((MysqlDataSource)dataSource).setUser("root");
        // 指定MySQL的密码
        ((MysqlDataSource)dataSource).setPassword("020110");

        // 2，与数据库建立连接
        // 获取一个数据库连接，这里将会使用到前面创建的DataSource
        Connection connection = dataSource.getConnection();

        // 3，构造SQL语句
        // 创建要执行的SQL语句，这里准备插入一个学生记录，并将要插入的学生的id和name作为占位符
        String sql = "insert into student values(?,?)";
        // 创建一个PreparedStatement，指定要执行的SQL语句
        PreparedStatement statement = connection.prepareStatement(sql);
        // 创建Scanner类，用于从控制台读取输入内容
        Scanner scan = new Scanner(System.in);
        // 从控制台读取输入的学号
        System.out.println("请输入你的学号:");
        int id = scan.nextInt();
        // 从控制台读取输入的姓名
        System.out.println("请输入你的姓名:");
        String name = scan.next();
        // 将读取到的学号和姓名设置到PreparedStatement的占位符位置上
        statement.setInt(1,id);
        statement.setString(2,name);
        // 打印即将执行的SQL语句
        System.out.println("sql = " + statement);

        // 4, 执行SQL语句
        // 执行PreparedStatement，返回值是操作影响的记录条数，这里是插入了一条学生记录
        int ret = statement.executeUpdate();
        // 打印执行结果
        System.out.println("ret = " + ret);

        // 5, 断开连接，释放资源
        // 关闭PreparedStatement和Connection，释放占用的连接等资源
        statement.close();
        connection.close();
    }
}